#include "pch.hpp"
#include "Connection.hpp"

using namespace db;




Connection::Connection(QSqlDatabase database, boost::shared_ptr<const RDBMS> rdbms)
	: m_database(database)
	, m_rdbms(rdbms)
{}
///////////////////////////////////////////////////////////////////////////////////////////////////

Connection::~Connection()
{}
///////////////////////////////////////////////////////////////////////////////////////////////////




bool Connection::isOpen() const
{
	return m_database.isOpen();
}
///////////////////////////////////////////////////////////////////////////////////////////////////




boost::shared_ptr<const RDBMS> Connection::rdbms() const
{
	return m_rdbms;
}
///////////////////////////////////////////////////////////////////////////////////////////////////




void Connection::begin()
{
	if(!m_database.transaction())
		BOOSTEXT_THROW(exception("Unable to begin transaction"));
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Connection::commit()
{
	if(!m_database.commit())
		BOOSTEXT_THROW(exception("Unable to commit transaction"));
}
///////////////////////////////////////////////////////////////////////////////////////////////////

void Connection::rollback()
{
	if(!m_database.rollback())
		BOOSTEXT_THROW(exception("Unable to perform rollback"));
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QSqlQuery Connection::prepare(QString statement)
{
	QSqlQuery query(m_database);
	if(!query.prepare(statement))
		BOOSTEXT_THROW(exception("Unable to prepare query", query.lastError()));

	return query;
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QSqlQuery Connection::try_execute(QString statement)
{
	return m_database.exec(statement);
}
///////////////////////////////////////////////////////////////////////////////////////////////////

QSqlQuery Connection::execute(QString statement)
{
	QSqlQuery query = m_database.exec(statement);
	if(query.lastError().isValid())
		BOOSTEXT_THROW(exception("Unable to execute query", query.lastError()));

	return query;
}
///////////////////////////////////////////////////////////////////////////////////////////////////
